The present invention relates generally to providing service oriented architecture computing services to consumers and more particularly to provision of such computing services from multiple vendors to a single service consumer entity.
Service oriented architecture computing services (herein sometimes referred to more simply as “services”) are known. In the contexts of software architecture, service-orientation in computing and service-oriented software architecture, a service is a computing functionality (for example, a software functionality) or a set of computing functionalities. In common computing parlance, “service” also refers to the machine logic (for example, computer program code that provides the functionality(ies)—however, this document may sometimes refer to the machine logic that implements the functionality of a service as service code. For example, one example service is retrieval of specified information. Another example service is the execution of a set of operations. Typically, different clients reuse a given service in the context of many and various larger computing tasks. For example, a service that retrieves a record associated with a person's name from a large data base may be used in: (i) by a larger program that is used to authenticate the person's identity over a communication network; (ii) by a larger program used to implement a legal change to the person's name; and (iii) by a search engine. In this example, the same code to retrieve the individual's record does not have to be rewritten for all three programs.
Typically, usage of a given service by various clients (sometimes herein called “service consuming entities”) is controlled by machine logic implemented policies. Typically, a service consuming entity is a set of computers belonging to a company. For example, a search engine company may own a large set of server computer devices that all use record-retrieving service mentioned in the previous paragraph.
Typically, a given client (that is, service consuming entity) is identified by a certain code. In many cases, a policy dictates the length of time that the given client may use (that is, access) a given service. The use of services typically requires data communications, storage of data, processing of data and the like. The mechanism to enable access by a client to the functionality of a service includes access of the service code and access to the service implementation hardware (that is, the computing hardware that provides the data communications associated with the service, the storage of data associated with the service, the hardware that stores data associated with use of the service, and the like). For example, access to a given service may be provided using a prescribed interface and may be exercised consistent with constraints and policies as specified by the service description.
Often several different services will be used in a larger business process. For example, if the business process is a customer order for goods, then constituent services may include: (i) “Create Order,” (ii) “Fulfill Order,” (iii) “Ship Order,” (iv) “Invoice Order,” and (v) “Cancel/Update Order.”
A service-oriented architecture (SOA) is a style of software design where services are provided: (i) to the other components by application components, (ii) through a communication protocol, and (iii) over a network. Service-oriented architectures are typically independent of (that is, generic with respect to) vendors, products and technologies. In an SOA, a service is a discrete unit of functionality that can be accessed remotely and acted upon and updated independently, such as retrieving a credit card statement online. In an SOA, a service typically has four properties: (i) it logically represents a business activity with a specified outcome; (ii) it is self-contained; (iii) t is a black box for its consumers; and (iv) it may consist of other underlying services. Different services can be used in conjunction to provide the functionality of a large software application. Typically, service-oriented architecture is less about how to modularize an application, and more about how to compose an application by integrating distributed, separately-maintained and deployed software components. It is enabled by technologies and standards that make it easier for components to communicate and cooperate over a network, especially an IP (internet protocol) network.
Serverless computing is a cloud-computing execution model in which the cloud provider dynamically manages the allocation of machine resources. Pricing is typically based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity. Serverless computing is a form of utility computing. Serverless computing still typically requires servers, hence the term “serverless” is a bit of a misnomer. The name “serverless computing” is used because the server management and capacity planning decisions are typically completely hidden from the developer or operator. When using a service, the consumer only depends on the proxy and sends requests to the proxy. Typically, in serverless computing, each vendor will have its own dedicated proxy, and communications with a given serverless proxy will be vendor specific in their form and format.
Serverless code can be used in conjunction with code deployed in traditional styles, such as microservices. Alternatively, applications can be written to be completely serverless and entirely avoid the use of provisioned servers.
The website called “Serverless Architectures” dated 22 May 2018 (and at the following URL address https://martinfowler.com/articles/serverless.html) states as follows: “Serverless architectures are application designs that incorporate third-party ‘Backend as a Service’ (BaaS) services and/or that include custom code run in managed, ephemeral containers on a ‘Functions as a Service’ (FaaS) platform.”
Serverless architectures are known to move much behavior to the front end. When using a service, the consumer only depends on the proxy and sends requests to the proxy. “Serverless” architectures typically remove, or reduce, the need for the traditional “always on” server systems sitting behind an application. “Sitting behind” means underlying here, particularly the servers or other hardware to deploy or run an application.
The use of proxies in computing (herein sometimes referred to as “proxies” or “proxy servers”) is known. A proxy server is used when a communication: (i) is sent from a source computing device over a communication network including a set of proxy computing device(s) and to a target computing device; (ii) the set of proxy computing device(s) do not reveal an identity of the target computing device (or user(s) associated therewith) to the source computing device; and (iii) the set proxy computing device(s) communicate the communication to the target computing device. Typically, the communication from the source to the target is responsive to a request from the target computing device to the source computing device, where: (i) the request also is communicated through the proxy; and (ii) the proxy prevents the source device from receiving an effective identification of the target.
In computer networks, a proxy server is a server (a computer system or an application) that typically acts as an intermediary for requests from clients seeking resources from other servers. Typically, a client connects to the proxy server, requesting some service, such as a file, connection, web page, or other resource available from a different server and the proxy server evaluates the request as a way to simplify and control its complexity. Proxies were invented to add structure and encapsulation to distributed systems. Today, most proxies are web proxies, facilitating access to content on the World Wide Web, providing anonymity and may be used to bypass IP address blocking. A proxy server may reside on the user's local computer, or at various points between the user's computer and destination servers on the Internet.
In some cases, a proxy can be right on the user's computer and not on an intermediate computer. Whether the proxy is in the user's computer, or in an intermediate computer, the IP address of the proxy is typically reachable in the user's LAN (local area network) (for example, 127.0.0.1 or localhost for the user's computer, and 9.181.91.249 for an intermediate computer).